<!DOCTYPE html>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="./resources/geometry-interfaces-test-helpers.js"></script>
<script>

test(function() {
  var matrix = new DOMMatrix();
  assert_identity_2d_matrix(matrix);
  var result = matrix.translate();
  assert_identity_2d_matrix(result);
  assert_identity_2d_matrix(matrix);
}, "DOMMatrix.translate()");

test(function() {
  var matrix = new DOMMatrix();
  assert_identity_2d_matrix(matrix);
  var result = matrix.translate(6);
  assert_2d_matrix_equals(result, [1, 0, 0, 1, 6, 0]);
  assert_identity_2d_matrix(matrix);
}, "DOMMatrix.translate(tx)");

test(function() {
  var matrix = new DOMMatrix();
  assert_identity_2d_matrix(matrix);
  var result = matrix.translate(2, 3);
  assert_2d_matrix_equals(result, [1, 0, 0, 1, 2, 3]);
  assert_identity_2d_matrix(matrix);
}, "DOMMatrix.translate(tx, ty)");

test(function() {
  var matrix = new DOMMatrix();
  matrix.translateSelf(2, 3);
  assert_2d_matrix_equals(matrix, [1, 0, 0, 1, 2, 3]);
  var result = matrix.translate(4, 2);
  assert_2d_matrix_equals(result, [1, 0, 0, 1, 6, 5]);
  assert_2d_matrix_equals(matrix, [1, 0, 0, 1, 2, 3]);
}, "DOMMatrix.translate(tx, ty) with non-identity");

test(function() {
  var matrix = new DOMMatrix();
  assert_identity_2d_matrix(matrix);
  var result = matrix.translateSelf();
  assert_identity_2d_matrix(result);
  assert_identity_2d_matrix(matrix);
}, "DOMMatrix.translateSelf()");

test(function() {
  var matrix = new DOMMatrix();
  assert_identity_2d_matrix(matrix);
  var result = matrix.translateSelf(5);
  assert_2d_matrix_equals(result, [1, 0, 0, 1, 5, 0]);
  assert_2d_matrix_equals(matrix, [1, 0, 0, 1, 5, 0]);
}, "DOMMatrix.translateSelf(tx)");

test(function() {
  var matrix = new DOMMatrix();
  assert_identity_2d_matrix(matrix);
  var result = matrix.translateSelf(4, 2);
  assert_2d_matrix_equals(result, [1, 0, 0, 1, 4, 2]);
  assert_2d_matrix_equals(matrix, [1, 0, 0, 1, 4, 2]);
}, "DOMMatrix.translateSelf(tx, ty)");

test(function() {
  var matrix = new DOMMatrix();
  assert_identity_2d_matrix(matrix);
  var result = matrix.translate(2, 3, 4);
  assert_3d_matrix_equals(result, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2, 3, 4, 1]);
  assert_identity_2d_matrix(matrix);
}, "DOMMatrix.translate(tx, ty, tz)");

test(function() {
  var matrix = new DOMMatrix();
  matrix.translateSelf(2, 3);
  assert_2d_matrix_equals(matrix, [1, 0, 0, 1, 2, 3]);
  var result = matrix.translate(4, 2, 3);
  assert_3d_matrix_equals(result, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 6, 5, 3, 1]);
  assert_2d_matrix_equals(matrix, [1, 0, 0, 1, 2, 3]);
}, "DOMMatrix.translate(tx, ty, tz) with non-identity");

test(function() {
  var matrix = new DOMMatrix();
  assert_identity_2d_matrix(matrix);
  var result = matrix.translateSelf(4, 2, 3);
  assert_3d_matrix_equals(result, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4, 2, 3, 1]);
  assert_3d_matrix_equals(matrix, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4, 2, 3, 1]);
}, "DOMMatrix.translateSelf(tx, ty, tz)");

test(function() {
  var matrix = new DOMMatrix();
  assert_identity_2d_matrix(matrix);
  matrix.m14 = 2;
  matrix.m24 = 3;
  matrix.m34 = 4;
  matrix.m44 = 7;
  assert_3d_matrix_equals(matrix, [1, 0, 0, 2, 0, 1, 0, 3, 0, 0, 1, 4, 0, 0, 0, 7]);
  matrix.translateSelf(7, -8, 2);
  assert_3d_matrix_equals(matrix, [1, 0, 0, 2, 0, 1, 0, 3, 0, 0, 1, 4, 7, -8, 2, 5]);
}, "DOMMatrix.translateSelf(tx, ty, tz) Homogeneous Coordinates");
</script>
